/**
 * 来源 http://blog.csdn.net/foruok/article/details/49120183
 * Writable
 * Writable流提供了一个接口，用来把数据写入到目的设备（或内存）中
 * 
 * ### Writable公开的事件
 * finish： 在end()被调用、所有数据都已被写入底层设备后发射。对应的处理器函数没有参数
 * pipe： 当你在Readable流上调用pipe()方法时，Writable流会发射这个事件，对应的处理器函数有一个参数，类型是Readable，指向与它连接的那个Readable流。
 * unpipe： 当你在Readable流上调用unpipe()方法时，Writable流会发射这个事件，对应的处理器函数有一个参数，类型是Readable，指向与刚与它断开连接的那个Readable流。
 * error： 出错时发射，对应的处理器函数的参数是Error对象。
 */

// Writable流的write(chunk[,encoding] [,callback])方法可以把数据写入流中。
// 其中，chunk是待写入的数据，是Buffer或String对象。这个参数是必须的，其它参数都是可选的。
// 如果chunk是String对象，encoding可以用来指定字符串的编码格式，write会根据编码格式将chunk解码成字节流再来写入。
// callback是数据完全刷新到流中时会执行的回调函数。write方法返回布尔值，当数据被完全处理后返回true（不一定是完全写入设备哦）。

// Writable流的end([chunk] [,encoding] [,callback])方法可以用来结束一个可写流。它的三个参数都是可选的。
// chunk和encoding的含义与write方法类似。callback是一个可选的回调，当你提供它时，它会被关联到Writable的finish事件上，这样当finish事件发射时它就会被调用

var fs = require('fs');

var writable = fs.createWriteStream('example.txt',{
  flags: 'w',
  defaultEncoding: 'utf8',
  mode: 0666,
});

writable.on('finish', function(){
  console.log('write finished');
  process.exit(0);
});

writable.on('error', function(err){
  console.log('write error - %s', err.message);
});

writable.write('My name is 火云邪神', 'utf8');

writable.end();